<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>107_闭包原理</title>
		<script>
			let a = "全局变量"

			/* 
			函数在作用域，在函数创建时就已经确定的(词法作用域)
				和调用的位置无关。fn的作用域就是全局作用域。
			
			闭包利用的就是词法作用域。
				函数内部的变量只能被函数里面的函数访问，外面无法访问，从而就把这个变量隐藏了。
				
			 */
			//变形一
			function fn() {
				console.log(a);
			}

			function fn2() {
				let a = "fn2的a"
				fn(); //fn函数中打印的是a是哪一个？要看fn的外层作用域是谁？
			}
			//fn2();

			//变形二
			function fn3() {
				let a = "fn3的a"

				function fn4() {
					console.log(a);
				}
				fn4();
			}
			//fn3();

			//变形三
			function fn3() {
				let a = "fn3的a。。"
				function fn4() {
					console.log(a);//打印的仍然是‘fn3的a’
				}
				return fn4;
			}
			let ret = fn3();//ret是谁？就是fn4.
			ret();
		</script>
	</head>
	<body>
	</body>
</html>